import { createStore, applyMiddleware } from 'redux';
import Thunk from 'redux-thunk';
import axios from 'axios';
//第一步，创建action
/* 添加入购物车的商品 */
function addShop_action(item) {
    return {
        type: "ADDSHOP",
        item
    }
}
/* 对首页的数据进行排序 */
function index_action(index){
    return {
        type:"INDEX",
        index
    }
}
/* 获取单个商店的所有商品 */
function detail_action(id){
    return {
        type:"DETAIL",
        id
    }
}
//同步引入数据
function allShop_add_action(item) {
    return {
        type: "ALLSHOP",
        item
    }
}
//异步请求所有商店数据
function allShop_action() {
    return function (dispatch) {
        axios.get('/allshop').then(res => {
            dispatch(allShop_add_action(res.data.list))
        })
    }
}
//处理搜索的数据
function filter_action(item){
    return {
        type:"FILTER",
        item
    }
}
//将店铺加入收藏页面
function collent_action(item){
    return {
        type:"COLLENT",
        item
    }
}
/* 保存收货地址 */
function addCity_action(item){
    return {
        type:"ADDCITY",
        item
    }
}
/* 保存编辑地址 */
function bianjiCity_action(item){
    return {
        type:"BIANJICITY",
        item
    }
}
/* 删除编辑地址 */
function removeCity_action(id){
    return {
        type:"REMOVECITY",
        id
    }
}
/* 编辑地址 */
function cityId_action(id){
    return {
        type:"CITYID",
        id
    }
}
/* 我的页面地址显示数据 */
function mycity_action(id){
    return {
        type:"MYCITY",
        id
    }
}
/* 加入购物车 */
function cat_action(item){
    return {
        type:"CAT",
        item
    }
}
/* 清空购物车 */
function clean_action(){
    return {
        type:"CLEAN",
    }
}
/* 加加 */
function jia_action(id){
    return {
        type:'JIA',
        id
    }
}
/* 减减 */
function jian_action(id){
    return {
        type:'JIAN',
        id
    }
}
/*  */
//reduces
var data = {
    collentShop: [],//收藏页数据
    allshop: [],//所有商品数据
    allshops: [],//所有商品数据附件
    detailshop:[],//单个商店的商品
    cityList:[],//所有的地址
    caseList:{},//编辑页面的唯一数据
    myList:{},//我的页面的唯一数据
    catList:[],//购物车列表
}
//创建reduces
function reduces(state = data, action) {
    /* 深拷贝 */
    state = JSON.parse(JSON.stringify(state));
    /* switch处理action */
    switch (action.type) {
        case "ADDSHOP":
            return state
        case "ALLSHOP"://加入所有商店信息
            state.allshop = action.item;
            state.allshops = action.item;//保存附件
            console.log(state.allshop);
            return state
        /* 提供下标进行排序 */
        case "INDEX":
            if(action.index===0){
                /* 综合排序 */
                state.allshop=state.allshops;//在此动用所有商品附件
            }else if(action.index===1){
                /* 距离最近 */
                state.allshop=state.allshop.sort(function(a,b){
                    return a.shop.city-b.shop.city
                })
            }else if(action.index===2){
                /* 销量最高 */
                state.allshop=state.allshop.sort(function(a,b){
                    return b.shop.num-a.shop.num
                })
            }
            return state
        case "FILTER":
            /* 重新给商店列表赋值 */
            state.allshops=state.allshop;
            if(action.item){
                /* 模糊搜索 */
               var arr= state.allshop.filter(item=>{
                   console.log(action.item);
                    return item.shop.name.includes(action.item)
                })
            } 
            /* 渲染组件 */
            if(arr.length>0){
                state.allshop=arr
            }
            return state
        case "DETAIL":
            /* 保存单个商店的所有商品 */
            state.detailshop.length=[];//一次只能有一个商店
           var obj1= state.allshop.find(item=>{
                return item.shop.id===action.id
            })
            state.detailshop=obj1.shop
            console.log(state.detailshop);
            return state
        /* 处理收藏数据 */
        case "COLLENT":
        var num=state.collentShop.findIndex(item=>{
            return item.id===action.item.id
        })
        if(num===-1){//不存在添加
            state.collentShop.push(action.item)
        }else{//存在删除
            state.collentShop.splice(num,1);
        }
        console.log(state.collentShop);
        return state;
    case "ADDCITY":
        action.item.id=new Date()*1;//添加一个id
       var num1= state.cityList.findIndex(item=>{//判断是否重复输入
            return item.city===action.item.city&&item.username===action.item.username&&item.call===action.item.call
        })
        if(num1===-1){
            state.cityList.push(action.item)
        }
        console.log(state.cityList);
        return state
        /* 处理编辑页面数据 */
        case "CITYID":
           state.caseList={}//保证存入的只有一个数据
           var obj2=state.cityList.find(item=>{
               return item.id===action.id
           })
           state.caseList=obj2;
           return state
        /* 保存编辑数据 */
        case "BIANJICITY":
           var num2= state.cityList.findIndex(item=>{
                return item.id===action.item.id
            })
            state.cityList.splice(num2,1,action.item)
            return state
        /* 保存我的页面地址数据数据 */
        case "MYCITY":
           var obj3= state.cityList.find(item=>{
                return item.id===action.id
            })
            state.myList=obj3;
            console.log(state.myList);
            return state
        /* 删除地址 */
        case "REMOVECITY":
            var num3=state.cityList.findIndex(item=>{
                return item.id===action.id
            })
            if(state.cityList[num3].id===state.myList.id){
                state.myList={}
            }
            state.cityList.splice(num3,1)
            return state
        /* 加入购物车 */
        case "CAT":
            /* 首先先判断是不是第一次加入购物车 */
           var num4= state.catList.findIndex(item=>{
                return item.id===action.item.id
            })
            if(num4===-1){//不存在添加
                state.catList.push(action.item);
            }else{//存在数量加加
                state.catList[num4].count++
            }
            return state
        /* 清空购物车 */
        case "CLEAN":
            state.catList.length=0
            return state
        /* 加加 */
        case "JIA":
            var obj4=state.catList.find(item=>{
                return item.id===action.id
            })
            obj4.count++
            return state
        /* 减减 */
        case "JIAN":
            var num5=state.catList.findIndex(item=>{
                return item.id===action.id
            })
            if(state.catList[num5].count>1){
                state.catList[num5].count--
            }else{
                state.catList.splice(num5,1)
            }
            
            return state
        /* default分支 */
        default: {
            return state
        }
    }
}
//创建store
var store = createStore(reduces, applyMiddleware(Thunk));
//导出
export {
    store,
    addShop_action,
    allShop_action,
    index_action,
    filter_action,
    detail_action,
    collent_action,
    addCity_action,
    cityId_action,
    bianjiCity_action,
    mycity_action,
    removeCity_action,
    cat_action,
    clean_action,
    jia_action,
    jian_action
}